package dao;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;

import hibernate.HibernateSession;

import hibernate.HibernateUtil;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.*;

import comun.CasillaCorreo;
import comun.OficinaCorreo;

public class OficinaCorreoDAO 
{
	private static OficinaCorreoDAO instancia = null;
	private static SessionFactory sf = null;

	public static OficinaCorreoDAO getInstancia() {
		if (instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new OficinaCorreoDAO();
		}
		return instancia;
	}
	
	public void addOficinaCorreo(OficinaCorreo oc){
		Session session = sf.openSession();
		session.beginTransaction();
		session.saveOrUpdate(oc);
		session.getTransaction().commit();
		session.flush();
		session.close();
	}

	public List<OficinaCorreo> getAllOficinas(){
		Session session = sf.openSession();
		Criteria criteria = session.createCriteria(OficinaCorreo.class);
		List<OficinaCorreo> list = (List<OficinaCorreo>) criteria.list();
		session.close();
		return list;
	}
	
	// no rompe:
//	public List<OficinaCorreo> getAllOficinasCasilla(String nombreCasilla){
//		Session session = sf.openSession();
//		System.out.println("abri sesion");
//		Criteria criteria = session.createCriteria(OficinaCorreo.class)
//		.createCriteria("casillas")
//		.add(Expression.eq("nombreCasilla",nombreCasilla));	
//		System.out.println("hice criteria");		
//		//criteria.add(cRestrictions..eq("casillas", nombreCasilla));
//		List<OficinaCorreo> list = (List<OficinaCorreo>) criteria.list();
//		System.out.println("Voy a cerrar sesion, hice list");
//		System.out.println("El tamanio de la lista es: "+list.size());
//		session.close();
//		return list;
//	}
	
	// ANDA COMO UN CAMPEON:

	public List<OficinaCorreo> getAllOficinasCasilla(String nombreCasilla){
		Session session = sf.openSession();
		System.out.println("abri sesion");
		Criteria criteria = session.createCriteria(OficinaCorreo.class)
		.createCriteria("casillas")
		.add(Restrictions.eq("nombreCasilla",nombreCasilla));	
		System.out.println("hice criteria");		
		//criteria.add(cRestrictions..eq("casillas", nombreCasilla));
		List<OficinaCorreo> list = (List<OficinaCorreo>) criteria.list();
		System.out.println("Voy a cerrar sesion, hice list");
		System.out.println("El tamanio de la lista es: "+list.size());
		session.close();
		return list;
	}
}
